package com.yuan.algorithms.training201607;

import java.util.Scanner;

/**
 * @author YouYuan
 * @contact 1265161633@qq.com
 * @date 2016年8月12日 上午9:26:29
 * @descript 输入一个整数N，请你计算从1到N的所有整数中1出现的次数。例如N=13，1出现的数为1，10，11，12，13
 *           一共6次，输出答案6即可。
 */
public class 一到N个数中一出现的个数 {

	static Scanner in = new Scanner(System.in);
	public static void main(String[] args) {
		while(in.hasNext()) {
			int n = in.nextInt();
			int sum = sum1(n);
			System.out.println(n + "个数中1出现的次数：" + sum);
		}
	}
	
	/**
	 * @param n
	 * @return 从1到n个数中1出现的次数
	 */
	private static int sum1(int n) {
		int count = 0;//总数
		int factor = 1;//因数
		int lowNum = 0;//低位数
		int currentNum = 0;//当前数
		int highNum = 0;//高位数
		while(n / factor > 0) {
			lowNum = n - (n / factor) * factor;
			currentNum = (n / factor) % 10;
			highNum = (n / 10) / factor;
			switch (currentNum) {
			case 0:
				count += highNum * factor;
				break;
			case 1:
				count += highNum * factor + lowNum + 1;
				break;
			default:
				count += (highNum + 1) * factor;
				break;
			}
			factor *= 10;
		}
		return count;
		
	}

}
